# 创建文件
# 导入 os 模块（可选的，如果需要创建路径中的目录）
import os
import re

# 要创建文件的路径
file_path = 'E:\\zengliang\\BaiduNetdiskDownload\\lufeixuecheng\\pythontest.txt'

# 确保目录存在（如果需要创建目录，可使用 os.makedirs）
os.makedirs(os.path.dirname(file_path), exist_ok=True)

# 打开文件并写入内容
with open(file_path, 'w') as file:
    file.write('这是一个文件')

# 写文件，注意，work路径一定要存在
f = open(file='E:\\work\\staff.txt', mode='w', encoding='utf-8')  # 若⽂件已存在，则覆盖
f.write("Alex CEO 600\n")
f.write("⿊姑娘 ⾏政 5000\n")
f.close()

# 只读模式,读取相对路径文件
f = open(file='..\\tempFile\\兼职⽩领学⽣空姐模特护⼠联系⽅式.txt', mode='r',
         encoding='utf-8')
print(f.readline())  # 读⼀⾏
print('------分隔符-------')
data = f.read()  # 读所有，剩下的所有
print(data)
f.close()

# 追加模式，写入内容到文件末尾
f = open(file='..\\tempFile\\兼职⽩领学⽣空姐模特护⼠联系⽅式.txt', mode='a', encoding='utf-8')
f.write("10. ⿊姑娘 北京 168 48 18963256952\n")  # 会追加到⽂件尾部
f.close()

# 循环读取文件内容
f = open(file='..\\tempFile\\兼职⽩领学⽣空姐模特护⼠联系⽅式.txt', mode='r', encoding='utf-8')
for line in f:
    line = line.split()
    id, name, addr, height, weight, phone = line
    height = int(height)
    weight = int(weight)
    if height > 170 and weight <= 50:  # 只打印身⾼>170 and 体᯿<=50的
        print(line)
f.close()

# 占硬盘⽅式的⽂件修改代码示例
f_name = "..\\tempFile\\兼职⽩领学⽣空姐模特护⼠联系⽅式.txt"
# 截取文件名称，不带后缀
f_name_no_ext = os.path.splitext(f_name)[0]
f_new_name = "%s_new.txt" % f_name_no_ext
old_str = "刘诺涵"
new_str = "[⿊姑娘]"
f = open(f_name, 'r', encoding='utf-8')
f_new = open(f_new_name, 'w', encoding='utf-8')
for line in f:
    if old_str in line:
        new_line = line.replace(old_str, new_str)
    else:
        new_line = line
    f_new.write(new_line)
f.close()
f_new.close()
# 上⾯的代码，会⽣成⼀个修改后的新⽂件 ，原⽂件不动，覆盖掉原⽂件
f_name = "..\\tempFile\\兼职⽩领学⽣空姐模特护⼠联系⽅式.txt"
f_new_name = "%s.new" % f_name
old_str = "刘诺涵"
new_str = "[⿊姑娘]"
f = open(f_name, 'r', encoding='utf-8')
f_new = open(f_new_name, 'w', encoding='utf-8')
for line in f:
    if old_str in line:
        new_line = line.replace(old_str, new_str)
    else:
        new_line = line
        f_new.write(new_line)
f.close()
f_new.close()
os.replace(f_new_name, f_name)  # 把新⽂件名字改成原⽂件 的名字，就把之前的覆盖掉了,windows使⽤os.replace


# 帮助⽂档说明replace会覆盖原⽂件

# 练习题-全局⽂本检索替换
# 写⼀个脚本，允许⽤户按以下⽅式执⾏时，即可以对指定⽂件内容进⾏全局替换，且替换完毕后打印替
# 换了多少处内容
def replace_text_in_file(filepath, search_text, replace_text):
    # 读取文件内容
    with open(filepath, 'r', encoding='utf-8') as file:
        content = file.read()

    # 进行替换并统计替换次数
    new_content, num_replacements = re.subn(search_text, replace_text, content)

    # 将替换后的内容写回文件
    with open(filepath, 'w', encoding='utf-8') as file:
        file.write(new_content)

    # 打印替换次数
    print(f"替换了 {num_replacements} 处内容")


if __name__ == '__main__':
    # 获取用户输入
    filepath = input("请输入文件路径:")
    search_text = input("请输入要替换的文本:")
    replace_text = input("请输入替换后的文本:")

    # 调用函数进行替换
    replace_text_in_file(filepath, search_text, replace_text)
